Repository navigation
docs(skills): the security rules teach a position rename through renamedFrom - #33480
Conversation
…medFrom A renamed position declares renamedFrom: ['old_name'] and is never deleted and re-added; at boot its holders move in every organization, idempotently, and only holders move. The file pays for the paragraph in place. Co-Authored-By: Claude <noreply@anthropic.com>
…the wildcard-set examples An eval expects the rules to say a second package shipping a name is refused at install, so that clause stays; the payment moves to two of the three example wildcard sets in the env-global warning. Co-Authored-By: Claude <noreply@anthropic.com>
|
domain:skills#1 · os-project-manager · session_01FEkQ5pjSPT7ui2EUcunaVb Contract reviewServed-tier: Read on Gates: the check-runs on this head read 0 failures at render time; Type Check, Lint, Build Core, Test Core (1/8, 2/8), Live E2E UI and one Check Changeset run were still in progress. Their conclusions are the gate verdicts; this record does not stand in for them. ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Findings:
No must-fix, no should-fix. Nits alone end the round. Implemented-by: VERDICT: PASS Adopted by the seat 2026-11-14T22:31Z · isolated sub-agent at CONTRACT_REVIEW_TIER · Ruling-ref: Leehom card cmsg_01TenzsRopZj4jMbvjX8uz1XFhuiZmTH8VFgMmHRmpiGAb, option A, tapped 2026-11-14T15:37Z |
|
domain:skills#1 · os-project-manager · session_01FEkQ5pjSPT7ui2EUcunaVb 维护者速读
席位核对Verdict: ACCEPT, held for the maintainer · head
|
|
domain:skills#1 · os-project-manager · session_01FEkQ5pjSPT7ui2EUcunaVb Correction: contract-review tierThe contract-review record(s) 6885229673 on this PR say The seat re-runs the review at |
|
domain:skills#1 · os-project-manager · session_01FEkQ5pjSPT7ui2EUcunaVb Contract reviewServed-tier: At-tier re-review of a merged head (merged as Read, never reviewed (code outside the diff, at this head): Gates: every check-run on this head concluded ① Derived judgments
② Semver level
③ Boundary flagsDev flags (report 6885028339,
The earlier record 6885229673, finding by finding:
④ Design judgment
The new paragraph, sentence by sentence:
Findings:
The other cuts, each read in place: No must-fix, no should-fix. Nits alone end the round; on a merged head they are accepted deviations or follow-up material (finding 6, with 2 and the Setup-bodies note, is the one worth a card). Implemented-by: VERDICT: PASS Adopted by the seat 2026-11-15T00:34Z · isolated sub-agent at CONTRACT_REVIEW_TIER (served model verified by the seat) · Ruling-ref: Leehom card cmsg_01TenzsRopZj4jMbvjX8uz1XFhuiZmTH8VFgMmHRmpiGAb, option A, tapped 2026-11-14T15:37Z |
Requested by Leehom · project thread
Fixes #33044
domain:skills#1 · os-project-manager · session_01FEkQ5k9eHen9BJozXn3f7Q
Clause-②: no
Metadata-protocol: none
维护者速读
skills/objectstack-data/rules/security.md的「Renaming or removing a shipped access item」节末新增一段:岗位改名要在新岗位上声明renamedFrom: ['old_name'],不要删了重建;启动时平台在每个组织里把旧名的持有人(sys_user_position)挪到新名,幂等;只挪持有人,共享规则/队列/记录共享接收方、待审批人、邀请里的旧名只在启动日志里列给管理员;列出不挪的五种情况。PositionSchema加了renamedFrom,但对外发布的技能没教,AI 写应用时改岗位名会删了重建,所有持有人静默失去权限集。skills/objectstack-data/rules/security.md文末新段;其次同文件的付账删减(下方表格逐条列出去处)。node scripts/check-skills-token-ratchet.mjs | grep rules/security.md,预期3959 / 3959,exit 0。skills/**):请批准或合并。What changes
skills/objectstack-data/rules/security.md, § Renaming or removing a shipped access item, gains one paragraph, Renaming a position:renamedFrom: ['old_name']on the renamed position, never delete and re-add (holders name a position by its bare name, so a deleted one leaves them granted nothing);sys_user_position) move to the new name in every organization, idempotently;One changeset,
.changeset/33044-skills-position-renamed-from.md,'@objectstack/skills': patch.Paid in place (token ceiling unchanged)
rules/security.mdwas 15828 bytes (3957 tokens, ceiling 3959, headroom 2) on the merge base34c05229; it is now 15834 bytes, 3959 tokens, headroom 0. The card carries no maintainer words that order the text, so no raise; the new paragraph is paid by deletions in the same file:(ADR-0090 D12)after the delegated-admin clause(explaining another user needs manage_users)packages/spec/src/security/explain.zod.ts(no read on the roster needed)on membership keyscom.acme.crm/hd_agentexample ofoutside-closurehooks-security-seeds-datasources.jsonasks exactly this scenario; the rule sentence stayshr/ops/auditorexample ofambiguous-in-closureCiphertext lives in sys_secret, only an opaque ref on the row.rules/field-types.mdsecretrow (encrypted at rest, masked, fail-closed, ADR-0100)e.g. identity tables a plugin writes via its own adapter (sys_sso_provider, OAuth clients)and(adapter-written rows often lack it)organization_idrow is denied) stays— the list renders emptyan app-declared default profile, a customer-authored setviewer_readonlyand themember_defaultcontrast stayWhole-file reading: 327 → 329 lines, 3957 → 3959 tokens. Whole-package reading (every
skills/**/SKILL.md): unchanged, noSKILL.mdis touched (4602 lines at the merge base).Acceptance notes
Every claim in the paragraph was read from the code on
origin/main(34c05229):renamedFromis a list of earlier position namespackages/spec/src/identity/position.zod.ts(renamedFrom, its JSDoc and.describe)packages/spec/src/identity/position-renamed-from.ts(refuseSelfRenamedFrom,refuseDishonestPositionRenamedFrom)positioncolumn only, idempotentpackages/plugins/plugin-security/src/position-renamed-holder-carry.tsheader § What it doesclaimed-twice,claimant-disabled,still-declared,held-by-other,owned-by-other,switched-off), each logged atwarn, holders leftPositionRenameRefusalandlogPositionRenameCarryleftBehindwarningmetadata:reloaded, positions: carry renamedFrom holders on a hot package install or upgrade too, not only at kernel boot #33238); the paragraph says "at boot" only, which always holds, since a reload carries a narrower scope and some install doors do not announce a reload.skills/objectstack-data/evals/objects-fields-relationships.json(PR docs(skills): parent-path record-currency amounts admit no grouping; data eval for the parent-path currencyField #33394) orskills/objectstack-data/SKILL.md(PR docs(skills): the object enable table names aiReadable #33458). No eval added: no existing eval asks about renaming a position.Verification
Derived gates on head 47d3f8e (42 of 44 exit 0, 2 NOT MEASURED)
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 44 commands; each ran with its exit captured before any pipe.--ran: "44 derived famil(ies) accounted for — 42 run, 2 NOT-MEASURED (2 DERIVED from a recorded exit 3)".check:doc-formula-expressionsran afterturbo run build --filter=@objectstack/formula --filter=@objectstack/lintunder the lock (VERDICT command-exit 0).check:dual-build-cjs-loadsandcheck:lean-entry-closureread every package'sdist/and exit 3 without a full build; this diff touches no package, so no build closure is owed and CI measures them.check:dts-closureandcheck:sourcemap-no-sources-contentexit 0 over the packages built here only (formula, lint and their closure).Tier and governed-merge verdicts
dispatch-gates --tier: MANDATORY contract-review tier forskills/**(no one-line exit). This card thread ran on the claim's default tier; named as a deviation in the report, and the seat's in-seat contract review at tier is the owed record.check-governed-merges.mjs --branch claude/project-thread-6ouxnr: exit 3, GOVERNED, landing tier H (人合),skills/** ×1; 52 changed lines, under the 3000 threshold.'@objectstack/skills': patch(skills/**ships in@objectstack/skills).Generated by Claude Code